package com.example.customannotate.aop;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 自定义记录接口运行时间注解
 *
 * @author zhouzhaodong
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface RunTimeRecord {

    /*
        @Target注解
        其定义了注解可以作用的位置，其value属性地常用取值有：
        ElementType.PACKAGE：包
        ElementType.TYPE：类、接口、枚举
        ElementType.FIELD：字段
        ElementType.METHOD：方法
        ElementType.PARAMETER：方法形参
        ElementType.CONSTRUCTOR：构造器方法

        @Retention注解
        其定义了注解的生命周期。其value属性地常用取值有：
        RetentionPolicy.SOURCE：在Java源文件中有效。编译器会丢弃掉
        RetentionPolicy.CLASS：在Class文件中有效。运行时JVM会丢弃掉
        RetentionPolicy.RUNTIME：运行时有效。此时即可通过反射获取到该注解
     */

    // 定义类型为String、名为value的属性
    String value();

    // 定义类型为String、名为level的属性, 默认值为 "INFO"
    String level() default "INFO";

}
